///******************************************************************************* // * Copyright (c) 2005, 2006 IBM Corporation and others. // * All rights reserved. This program and the accompanying materials // * are made available under the terms of the Eclipse Public License v1.0 // * which accompanies this distribution, and is available at // * http://www.eclipse.org/legal/epl-v10.html // * // * Contributors: // * IBM Corporation - initial API and implementation // *******************************************************************************/ //package org.eclipse.ui.tests.api; // //import java.util.Iterator; //import java.util.List; // //import org.eclipse.core.runtime.IStatus; //import org.eclipse.swt.SWT; //import org.eclipse.swt.widgets.Button; //import org.eclipse.ui.IMemento; //import org.eclipse.ui.IWorkbenchPreferenceConstants; //import org.eclipse.ui.IWorkbenchWindow; //import org.eclipse.ui.XMLMemento; //import org.eclipse.ui.internal.IWorkbenchConstants; //import org.eclipse.ui.internal.WindowTrimProxy; //import org.eclipse.ui.internal.WorkbenchWindow; //import org.eclipse.ui.internal.layout.ITrimManager; //import org.eclipse.ui.internal.layout.IWindowTrim; //import org.eclipse.ui.internal.util.PrefUtil; //import org.eclipse.ui.tests.harness.util.UITestCase; // ///** // * Test to exercise the trim layout save/restore/modify support. // * // * @since 3.2 // */ //public class TrimLayoutTest extends UITestCase { // // private static final String BUTTON_B_ID = "my.button.b"; // // public static final String[] TOP_TRIM_LIST = { // "org.eclipse.ui.internal.WorkbenchWindow.topBar", // TrimList.TRIM_LIST_ID }; // // public static final String[] TOP_BUTTON_TRIM = { // "org.eclipse.ui.internal.WorkbenchWindow.topBar", BUTTON_B_ID, // TrimList.TRIM_LIST_ID }; // // private boolean fHeapStatusPref; // // /** // * @param testName // */ // public TrimLayoutTest(String testName) { // super(testName); // } // // /** // * Will test that the trim area IDs are returned. // * // * @throws Throwable // */ // public void testGetIDs() throws Throwable { // WorkbenchWindow window = openWorkbenchWindow(); // ITrimManager trimManager = window.getTrimManager(); // int[] ids = trimManager.getAreaIds(); // assertEquals("number of trim areas", 4, ids.length); // } // // /** // * Test the basic trim layout of a workbench window. // * // * @throws Throwable // * on error // */ // public void testTrimInformation() throws Throwable { // WorkbenchWindow window = openWorkbenchWindow(); // ITrimManager trimManager = window.getTrimManager(); // validateDefaultBottomLayout(trimManager); // } // // /** // * Swap the status line with the ProgressRegion, and check that the control // * order has been updated. // * // * @throws Throwable // */ // public void testMoveStatusLine() throws Throwable { // WorkbenchWindow window = openWorkbenchWindow(); // ITrimManager trimManager = window.getTrimManager(); // validateDefaultBottomLayout(trimManager); // // // Capture the ids of the 1st and 3rd elements // List trim = trimManager.getAreaTrim(SWT.BOTTOM); // String id1 = ((IWindowTrim) trim.get(1)).getId(); // String id3 = ((IWindowTrim) trim.get(3)).getId(); // // // Swap the first and third trim elements // swapPostition(trim, 1, 3); // trimManager.updateAreaTrim(ITrimManager.BOTTOM, trim, false); // window.getShell().layout(true, true); // // // Check the swap // trim = trimManager.getAreaTrim(ITrimManager.BOTTOM); // assertTrue("element failed to swap", getIndexOf(trim, id1) == 3); // assertTrue("element failed to swap", getIndexOf(trim, id3) == 1); // } // // /** // * Swap the fast view bar and the progress region, and then check that the // * controls have been updated. // * // * @throws Throwable // */ // public void testMoveFastViewBar() throws Throwable { // WorkbenchWindow window = openWorkbenchWindow(); // ITrimManager trimManager = window.getTrimManager(); // validateDefaultBottomLayout(trimManager); // // // Capture the ids of the 1st and 3rd elements // List trim = trimManager.getAreaTrim(SWT.BOTTOM); // String id0 = ((IWindowTrim) trim.get(0)).getId(); // String id3 = ((IWindowTrim) trim.get(3)).getId(); // // // Swap the zero'th and third trim elements // swapPostition(trim, 0, 3); // trimManager.updateAreaTrim(ITrimManager.BOTTOM, trim, false); // window.getShell().layout(true, true); // // // Check the swap // trim = trimManager.getAreaTrim(ITrimManager.BOTTOM); // assertTrue("element failed to swap", getIndexOf(trim, id0) == 3); // assertTrue("element failed to swap", getIndexOf(trim, id3) == 0); // } // // /** // * This test isn't really about removing trim, just testing that the if the // * heap status trim is not in the trim list, it's removed from the bottom // * trim area. // * // * @throws Throwable // * on error // */ // public void testRemoveHeapStatus() throws Throwable { // WorkbenchWindow window = openWorkbenchWindow(); // ITrimManager trimManager = window.getTrimManager(); // validateDefaultBottomLayout(trimManager); // // // Remove the Heap Status // List trim = trimManager.getAreaTrim(ITrimManager.BOTTOM); // int hsIndex = getIndexOf(trim, "org.eclipse.ui.internal.HeapStatus"); // trim.remove(hsIndex); // trimManager.updateAreaTrim(ITrimManager.BOTTOM, trim, true); // window.getShell().layout(true, true); // // // Make sure that its gone // trim = trimManager.getAreaTrim(ITrimManager.BOTTOM); // hsIndex = getIndexOf(trim, "org.eclipse.ui.internal.HeapStatus"); // assertTrue("HeapStatus failed to remove", hsIndex == -1); // } // // /** // * Test the public API to add a piece of trim to the end of the trim area. // * // * @throws Throwable // */ // public void testAddExtraTrim() throws Throwable { // WorkbenchWindow window = openWorkbenchWindow(); // ITrimManager trimManager = window.getTrimManager(); // assertTrue( // "The window should have it's top banner in place", // trimManager // .getTrim("org.eclipse.ui.internal.WorkbenchWindow.topBar") != null); // // TrimList trimList = new TrimList(window.getShell()); // trimManager.addTrim(ITrimManager.TOP, trimList); // window.getShell().layout(); // // List trim = trimManager.getAreaTrim(ITrimManager.TOP); // validatePositions(TOP_TRIM_LIST, trim); // } // // /** // * Test the public API to add a piece of trim before an existing piece of // * trim. // * // * @throws Throwable // */ // public void testPlaceExtraTrim() throws Throwable { // WorkbenchWindow window = openWorkbenchWindow(); // ITrimManager trimManager = window.getTrimManager(); // TrimList trimList = new TrimList(window.getShell()); // trimManager.addTrim(ITrimManager.TOP, trimList); // // // WindowTrimProxy is an internal "quick and dirty" way // // to just provide a control to the trim ... not public API // Button b = new Button(window.getShell(), SWT.PUSH); // b.setText("B"); // IWindowTrim buttonTrim = new WindowTrimProxy(b, BUTTON_B_ID, // "Button B", SWT.TOP | SWT.BOTTOM, false); // // // find an existing piece of trim to use as a reference // IWindowTrim trim = trimManager.getTrim(TrimList.TRIM_LIST_ID); // assertTrue(trimList == trim); // trimManager.addTrim(ITrimManager.TOP, buttonTrim, trim); // window.getShell().layout(); // // List topTrim = trimManager.getAreaTrim(ITrimManager.TOP); // validatePositions(TOP_BUTTON_TRIM, topTrim); // } // // /** // * Test that the save-state is recording trim layout. // * // * @throws Throwable // */ // public void testSaveWorkbenchWindow() throws Throwable { // WorkbenchWindow window = openWorkbenchWindow(); // // XMLMemento state = XMLMemento // .createWriteRoot(IWorkbenchConstants.TAG_WINDOW); // IStatus rc = window.saveState(state); // assertEquals(IStatus.OK, rc.getSeverity()); // // IMemento trim = state.getChild(IWorkbenchConstants.TAG_TRIM); // assertNotNull(trim); // // int[] ids = window.getTrimManager().getAreaIds(); // IMemento[] children = trim // .getChildren(IWorkbenchConstants.TAG_TRIM_AREA); // assertTrue("Should have <= " + ids.length + " trim areas", // children.length <= ids.length); // assertEquals("Our trim configuration starts with", 2, children.length); // } // // /** // * Test that the workbench window can restore trim state from an // * <code>IMemento</code>. // * // * @throws Throwable // */ // public void testRestoreStateWithChange() throws Throwable { // WorkbenchWindow window = openWorkbenchWindow(); // ITrimManager trimManager = window.getTrimManager(); // validateDefaultBottomLayout(trimManager); // // int bottomTrimCount = trimManager.getAreaTrim(SWT.BOTTOM).size(); // // // Create a memento and write the state to it... // XMLMemento state = XMLMemento // .createWriteRoot(IWorkbenchConstants.TAG_WINDOW); // IStatus rc = window.saveState(state); // // // Did the save work? // assertEquals(IStatus.OK, rc.getSeverity()); // // // Does it have the right info? // IMemento trimMemento = state.getChild(IWorkbenchConstants.TAG_TRIM); // assertNotNull(trimMemento); // // // Is the child content the same // IMemento[] children = trimMemento // .getChildren(IWorkbenchConstants.TAG_TRIM_AREA); // int childIdx = 0; // IMemento bottomTrim = null; // String bottomId = new Integer(SWT.BOTTOM).toString(); // // // Find the 'bottom' trim // for (; childIdx < children.length; childIdx++) { // if (children[childIdx].getID().equals(bottomId)) { // bottomTrim = children[childIdx]; // break; // } // } // assertNotNull(bottomTrim); // // // Make sure we have the right number of entries // children = bottomTrim.getChildren(IWorkbenchConstants.TAG_TRIM_ITEM); // assertEquals(bottomTrimCount, children.length); // // // 'swap' the 0 and 3 trim using only the stored ids // String id0 = children[0].getID(); // String id3 = children[3].getID(); // children[0].putString(IMemento.TAG_ID, id3); // children[3].putString(IMemento.TAG_ID, id0); // // // Restore the trim from the modified state // window.restoreState(state, window.getActivePage().getPerspective()); // window.getShell().layout(true, true); // // List trim = trimManager.getAreaTrim(ITrimManager.BOTTOM); // assertTrue("Restore has wrong layout", getIndexOf(trim, id0) == 3); // assertTrue("Restore has wrong layout", getIndexOf(trim, id3) == 0); // } // // /** // * Test that the workbench window can restore trim state from an // * <code>IMemento</code> where a trim item has moved sides. // * // * @throws Throwable // */ // public void testRestoreStateWithLocationChange() throws Throwable { // WorkbenchWindow window = openWorkbenchWindow(); // ITrimManager trimManager = window.getTrimManager(); // validateDefaultBottomLayout(trimManager); // // int bottomTrimCount = trimManager.getAreaTrim(SWT.BOTTOM).size(); // // XMLMemento state = XMLMemento // .createWriteRoot(IWorkbenchConstants.TAG_WINDOW); // IStatus rc = window.saveState(state); // assertEquals(IStatus.OK, rc.getSeverity()); // IMemento trim = state.getChild(IWorkbenchConstants.TAG_TRIM); // assertNotNull(trim); // // IMemento[] children = trim // .getChildren(IWorkbenchConstants.TAG_TRIM_AREA); // int childIdx = 0; // IMemento bottomTrim = null; // String bottomId = new Integer(SWT.BOTTOM).toString(); // for (; childIdx < children.length; childIdx++) { // if (children[childIdx].getID().equals(bottomId)) { // bottomTrim = children[childIdx]; // break; // } // } // assertNotNull(bottomTrim); // // children = bottomTrim.getChildren(IWorkbenchConstants.TAG_TRIM_ITEM); // assertEquals(bottomTrimCount, children.length); // // // kinda fake to remove the fast view bar from the bottom // String id = children[0].getID(); // children[0].putString(IMemento.TAG_ID, children[3].getID()); // // IMemento left = trim.createChild(IWorkbenchConstants.TAG_TRIM_AREA, // new Integer(SWT.LEFT).toString()); // left.createChild(IWorkbenchConstants.TAG_TRIM_ITEM, id); // window.restoreState(state, window.getActivePage().getPerspective()); // window.getShell().layout(true, true); // // List windowTrim = trimManager.getAreaTrim(ITrimManager.BOTTOM); // assertEquals(bottomTrimCount-1, windowTrim.size()); // // windowTrim = trimManager.getAreaTrim(ITrimManager.LEFT); // assertEquals(1, windowTrim.size()); // } // // /** // * These tests use 'internal' methods from the <code>WorkbenchWindow</code>. // * This method ensures that the tests will fail if the <code>openTestWindow</code> // * ever returns anything else // * // * @return The type-safe WorkbenchWindow // */ // private WorkbenchWindow openWorkbenchWindow() { // IWorkbenchWindow iw = openTestWindow(); // assertTrue("Window must be a WorkbenchWindow", (iw instanceof WorkbenchWindow)); // // return (WorkbenchWindow)iw; // } // // /** // * Swap 2 IDs in the description. // * // * @param descs // * the description array // * @param pos1 // * position 1, from 0 // * @param pos2 // * position 2, from 0 // */ // private void swapPostition(List trim, int pos1, int pos2) { // Object tmp = trim.get(pos1); // trim.set(pos1, trim.get(pos2)); // trim.set(pos2, tmp); // } // // /** // * Get the position of the given trim element from the trim // * // * @param trimIds The list of ids returned by the TrimManager // * @param id The id of the trim to get the index of // * @return The zero-based index or -1 if not found // */ // private int getIndexOf(List trimIds, String id) { // int index = 0; // for (Iterator iterator = trimIds.iterator(); iterator.hasNext();) { // IWindowTrim trim = (IWindowTrim) iterator.next(); // if (id.equals(trim.getId())) // return index; // index++; // } // // return -1; // } // // /** // * Ensure that all the base trim is there and has // * the correct -relative- positions // * // * @param descs The ordered list of trim descriptors // * for the bottom trim area // */ // private void validateDefaultBottomLayout(ITrimManager trimManager) { // List descs = trimManager.getAreaTrim(SWT.BOTTOM); // // // Must have at least 4 elements // assertTrue("Too few trim elements", descs.size() >= 4); // // // Ensure that all the base trim is there and has // // the correct -relative- positions // int fvbIndex = getIndexOf(descs, "org.eclise.ui.internal.FastViewBar"); // assertTrue("Fast View Bar not found", fvbIndex != -1); // int slIndex = getIndexOf(descs, "org.eclipse.jface.action.StatusLineManager"); // assertTrue("StatusLine not found", slIndex != -1); // int hsIndex = getIndexOf(descs, "org.eclipse.ui.internal.HeapStatus"); // assertTrue("Heap Status not found", hsIndex != -1); // int prIndex = getIndexOf(descs, "org.eclipse.ui.internal.progress.ProgressRegion"); // assertTrue("Progress Region not found", prIndex != -1); // // assertTrue("Fast View out of position", fvbIndex < slIndex); // assertTrue("Status Line out of position", slIndex < hsIndex); // assertTrue("Heap Status out of position", hsIndex < prIndex); // } // // /** // * Match the returned set of IDs exactly with expected IDs. // * // * @param expectedIDs // * the string IDs in order. // * @param retrievedIDs // * the current IDs in order. // */ // private void validatePositions(String[] expectedIDs, List retrievedIDs) { // assertEquals("Number of trim items don't match", expectedIDs.length, // retrievedIDs.size()); // // for (int i = 0; i < expectedIDs.length; ++i) { // assertEquals("Failed for postition " + i, expectedIDs[i], // ((IWindowTrim) retrievedIDs.get(i)).getId()); // } // } // // /* // * (non-Javadoc) // * // * @see org.eclipse.ui.tests.util.UITestCase#doSetUp() // */ // protected void doSetUp() throws Exception { // super.doSetUp(); // // // Ensure that the HeapStatus is showing // fHeapStatusPref = PrefUtil.getAPIPreferenceStore().getBoolean( // IWorkbenchPreferenceConstants.SHOW_MEMORY_MONITOR); // PrefUtil.getAPIPreferenceStore().setValue( // IWorkbenchPreferenceConstants.SHOW_MEMORY_MONITOR, true); // } // // /* // * (non-Javadoc) // * // * @see org.eclipse.ui.tests.util.UITestCase#doTearDown() // */ // protected void doTearDown() throws Exception { // PrefUtil.getAPIPreferenceStore().setValue( // IWorkbenchPreferenceConstants.SHOW_MEMORY_MONITOR, // fHeapStatusPref); // super.doTearDown(); // } // //}